package com.play2gether;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;


/**
 * Created by Raul on 24/03/14.
 */
public class registroActivity extends ActionBarActivity implements View.OnClickListener  {

    public TextView textCorreo;
    public TextView textPassword;
    public TextView textRepPassoword;
    public CheckBox cbTerminos;
    public Button   btAceptar;
    public TextView btPrivacidad;
    public String[] datos = new String[2];
    public String url;
    public int conformidad;

    httpHandler handler;

    private DataBaseManager manager;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.registro);

        url = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/registro";
        manager = new DataBaseManager(this);

        configurarVista();
        configurarNavbar();
    }
    private void configurarVista(){

        textCorreo        = (TextView) findViewById(R.id.inputCE);
        textPassword      = (TextView) findViewById(R.id.inputPassword);
        textRepPassoword  = (TextView) findViewById(R.id.inputRPassword);
        cbTerminos        = (CheckBox) findViewById(R.id.cbTerminos);
        btAceptar         = (Button)   findViewById(R.id.btAceptar);
        btPrivacidad      = (TextView) findViewById(R.id.bt_privacidad);

        btAceptar.setOnClickListener(this);
        btPrivacidad.setOnClickListener(this);

        //Para activar checkpoint si se activa en los términos
        Bundle bundle = getIntent().getExtras();
        if (bundle.getString("ok").equals("1")){ cbTerminos.setChecked(true); }

    }
    private void configurarNavbar(){
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        actionBar.setCustomView(R.layout.navbar);

        Button btLogoNV       = (Button) findViewById(R.id.btLogoNV);
        Button btFormularioNV = (Button) findViewById(R.id.btFormularioNV);
        Button btSugerenciaNV = (Button) findViewById(R.id.btSugerenciaNV);
        Button btOpcionesNV   = (Button) findViewById(R.id.btOpcionesNV);
        Button btAtras        = (Button) findViewById(R.id.bt_atras);
        Button btSincronizar  = (Button) findViewById(R.id.bt_sincronizar);

        btLogoNV.setOnClickListener(this);
        btAtras.setOnClickListener(this);

        btFormularioNV.setAlpha(0);
        btSugerenciaNV.setAlpha(0);
        //btAtras.setAlpha(0);
        btSincronizar.setAlpha(0);
        btOpcionesNV.setAlpha(0);

        TextView tituloNav = (TextView) findViewById(R.id.tituloLayout);
        tituloNav.setText("Registro");
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.btAceptar:
                datos[0] = textCorreo.getText().toString();
                datos[1] = textPassword.getText().toString();
                String emailRep = textRepPassoword.getText().toString();
                String resultado = utilidades.comprobarDatos(datos, emailRep, cbTerminos);

                if (resultado.equals("0")) {
                    try {
                        new Registrar().execute();
                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.e("ERROR", e.getMessage());
                    }
                } else if (!cbTerminos.isChecked()) {
                    mostrarAlerta();
                } else {
                    Toast.makeText(getApplicationContext(), resultado, Toast.LENGTH_SHORT).show();
                }

                break;
            case R.id.bt_privacidad:
                Intent intent = new Intent(registroActivity.this, privacidadActivity.class);
                startActivity(intent);
                break;
            //Boton navbar
            case R.id.bt_atras:
                finish();
                break;
            case R.id.btLogoNV:
                finish();
                break;
        }
    }

    public class Registrar extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute(){ //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground
            Toast.makeText(getApplicationContext(),"Conectando con el servidor", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected  JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.
            HttpClient cliente = new DefaultHttpClient();
            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result="";
            InputStream is = null;
            JSONObject json = null;

            //Añadir parametros
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("email",datos[0]));
            params.add(new BasicNameValuePair("password",datos[1]));

            try {
                htppost.setEntity(new UrlEncodedFormEntity(params));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
                //text = EntityUtils.toString(entity);
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
            } catch(Exception e){}

            try{
                json = new JSONObject(result);
            }catch(JSONException e){}

            //return json;
            return json;
        }
        protected void onPostExecute(JSONObject json){
            String estado = "";
            String asunto = "";
            String id     = "";
            try {
                estado = (String) json.get("estado");
                if (estado.equals("ok")){ id = (String) json.get("id_usuario"); } //Si no salta a la excepción
                asunto = (String) json.get("asunto");
            } catch (JSONException e) {
                Toast.makeText(getApplicationContext(),"No has sido registrado. Inténtalo otra vez!!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }

            if (estado.equals("ok")){
                                      if (!manager.hayUsuariosRegistrados()) {
                                          try {
                                              new obtenerDatosKamasutra().execute();
                                          } catch (Exception e) {
                                              e.printStackTrace();
                                          }
                                      }
                                      manager.registrar(Integer.parseInt(id),textCorreo.getText().toString(),textPassword.getText().toString());
                                      mostrarAlerta2();
                                    }
            else                    { Toast.makeText(getApplicationContext(),asunto, Toast.LENGTH_SHORT).show(); }
        }

    }
    public void mostrarAlerta(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(registroActivity.this);
        alertDialog.setMessage("Debe aceptar los términos de privacidad para poder registrarse");

        alertDialog.setPositiveButton("CERRAR",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {}
                });

        alertDialog.show();

    }
    public void mostrarAlerta2(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(registroActivity.this);
        alertDialog.setMessage("Felicidades te has registrado a Play2gether!!");

        alertDialog.setPositiveButton("CERRAR",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { finish();}
                });

        alertDialog.show();

    }

    public class obtenerDatosKamasutra extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute(){ //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground

        }

        @Override
        protected  JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.
            HttpClient cliente = new DefaultHttpClient();
            //HttpPost htppost = new HttpPost(url+"infoKamasutra");
            url   = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/infokamasutra";

            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result = "";
            InputStream is = null;
            JSONObject json = null ;

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF8"));
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result = sb.toString();
            } catch (Exception e) {
            }

            try {
                json = new JSONObject(result);

                manager.LlenarBBDDconDatosKamasutra(json);
            } catch (JSONException e) {
            }
            //return json;
            return json;
        }
        protected void onPostExecute(JSONObject json) {

        }

    }

}
